package com.justme.shipdfer.core;

import com.justme.shipdfer.enums.TemplateTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.beetl.core.GroupTemplate;
import org.beetl.core.Template;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author shiv
 * @create 2021/4/17 5:53 下午
 */
@Slf4j
@Component
public class TemplateFactory {

    @Autowired
    private GroupTemplate groupTemplate;

    public Template getTemplate(String templateKey, TemplateTypeEnum typeEnum) {

        // 如果制定了加载资源类，则走指定的方式
        if (typeEnum != null) {
            return this.groupTemplate.getTemplate(getKey(TemplateTypeEnum.TEXT, templateKey));
        }

        // 按优先级排序
        List<TemplateTypeEnum> templateTypeEnums = Arrays.stream(TemplateTypeEnum.values())
                .filter(item -> item.getSupportPdf() != null && item.getSupportPdf())
                .sorted(Comparator.comparing(TemplateTypeEnum::getOrder))
                .collect(Collectors.toList());

        // 获取适合的 template
        for (TemplateTypeEnum templateTypeEnum : templateTypeEnums) {
            if (groupTemplate.hasTemplate(getKey(templateTypeEnum, templateKey))) {
                return groupTemplate.getTemplate(getKey(templateTypeEnum, templateKey));
            }
        }

        // 默认值, 走到这里肯定是没有找到对应的资源了, 可以直接抛出异常
        return this.groupTemplate.getTemplate(getKey(TemplateTypeEnum.CLASSPATH, templateKey));

    }

    private String getKey(TemplateTypeEnum templateTypeEnum, String templateKey) {
        return templateTypeEnum.getPrefix() + templateKey + templateTypeEnum.getSuffix();
    }

}
